# 导入JsonResponse类，用于处理HTTP响应，返回JSON格式的数据
from django.http import JsonResponse

# 导入View类，它是Django中的视图类，用于处理Web请求
from django.views import View
# 导入DRF JWT认证所需的设置
from rest_framework_jwt.settings import api_settings

# 从用户模型模块中导入SysUser类
from user.models import SysUser

class TestView(View):
    """
    测试视图类，用于处理GET请求并返回测试信息。
    继承自Django的View类，以类视图的方式处理请求。
    """
    def get(self, request):
        """
        处理GET请求，以获取用户列表信息。

        从请求的元数据中获取HTTP_AUTHORIZATION头部信息，用于身份验证。
        如果存在有效的令牌，则查询所有系统用户信息并以JSON格式返回；
        否则，返回错误信息，表示没有访问权限。

        Parameters:
        - request: HttpRequest对象，包含元数据和请求信息。

        Returns:
        - JsonResponse对象，包含用户信息或错误信息。
        """
        # 获取请求中的授权令牌
        token = request.META.get('HTTP_AUTHORIZATION')
        print("token1:", token)

        if token != None and token != '':
            # 如果令牌存在且不为空，则查询所有用户信息
            userList_obj = SysUser.objects.all()
            print(userList_obj, type(userList_obj))

            # 将查询结果转换为字典，便于进一步处理
            userList_dict = userList_obj.values()
            print(userList_dict, type(userList_dict))

            # 将字典对象转换为列表，准备以JSON格式返回
            userList = list(userList_dict)
            print(userList, type(userList))

            # 返回成功响应，包含用户列表信息
            return JsonResponse({'code': 200, 'info': '测试！', 'data': userList})
        else:
            # 如果令牌为空，则返回错误响应，表示没有访问权限
            return JsonResponse({'code': 401, 'info': '没有访问权限！'})

class JwtTestView(View):
    """
    JwtTestView类继承自View，用于处理JWT相关的测试请求。
    主要功能是生成并返回一个JWT token。
    """

    def get(self, request):
        """
        处理GET请求的方法。
        从数据库中获取用户名和密码匹配的用户对象，并生成JWT token。

        参数:
        - request: HttpRequest对象，包含请求的相关信息。

        返回:
        - JsonResponse对象，包含生成的JWT token。
        """

        # 直接从数据库中获取指定用户名和密码的用户对象
        user = SysUser.objects.get(username='admin', password='123456')

        # 从API设置中获取JWT payload处理函数和编码处理函数
        jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER  # 小写快捷键ctrl+shift+U
        jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

        # 将用户对象传递进去，获取到该对象的属性值
        payload = jwt_payload_handler(user)
        print("payload:",payload, type(payload))

        # 将属性值编码成jwt格式的字符串
        token = jwt_encode_handler(payload)
        print("token:",token, type(token))

        # 返回包含JWT token的JSON响应
        return JsonResponse({'code': 200, 'token': token})